package com.webserver.core;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 启动类
 * <p>
 * 负责：
 * 1.启动程序
 * 2.负责分配线程来与客户端交互
 */
public class BirdApplication {
    //声明一个ServerSocket变量，用于接受与分配客户端的连接
    ServerSocket serverSocket;

    /**
     * BirdApplication的无参构造器
     * <p>
     * 负责：初始化serverSocket, 并确定port即端口号是多少
     */
    public BirdApplication() {
        try {
            System.out.println("正在启动服务器...");
            //初始化serverSocket, 并确定port即端口号为9527
            serverSocket = new ServerSocket(9527);
            System.out.println("服务器启动成功！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * void start()方法
     * <p>
     * 负责：
     * 1.接受客户端并分配一个Socket与其连接
     * 2.创建一个线程, 将Socket传入, 让其与客户端交互
     */
    public void start() {
        try {
            System.out.println("等待客户端连接...");
            //接受客户端并分配一个Socket与其连接
            Socket socket = serverSocket.accept();

            //创建一个ClientHandler对象, 把Socket传入其中
            ClientHandler handler = new ClientHandler(socket);

            //创建一个线程, 执行ClientHandler内的run方法来与客户端交互
            Thread t = new Thread(handler);

            //开启线程
            t.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * void main()方法
     * <p>
     * 负责：启动程序
     */
    public static void main(String[] args) {
        //创建一个BirdApplication对象
        BirdApplication application = new BirdApplication();

        //调用void start()开始程序
        application.start();
    }
}
